/*
 * Vent_Mayorizacion.java
 *
 * Created on 2 de septiembre de 2008, 04:35 PM
 */

package administrador;

import java.math.RoundingMode;
import java.sql.*;
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JPanel;

/**
 *
 * @author  daniel1
 */
public class Vent_Mayorizacion extends javax.swing.JPanel {
 Usuario user;
 int bodega;
 Conexion conexion;
 AdministradorDiario diarioEnt;
 AdministradorView aview;
 //Guardo los paneles en:
 Vector vectMayor=new Vector();
 
 //Nath Redondeo
    NumberFormat nf = NumberFormat.getNumberInstance();
    /** Creates new form Vent_Mayorizacion */
    public Vent_Mayorizacion(Conexion cEnt,int BEnt,Usuario user,AdministradorDiario diarioEnt,AdministradorView aview) {
        DecimalFormat dec=(DecimalFormat)nf;
        dec.applyPattern("###.##");
        //Configuro Redondeo
        nf.setMaximumFractionDigits(2);
        nf.setRoundingMode(RoundingMode.HALF_UP);
        
        this.aview=aview;
        this.diarioEnt=diarioEnt;
        bodega=BEnt;
        this.user=user;
        conexion=cEnt;
        initComponents();
        refrescar();
        muestraMayor();
    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        jLabel3 = new javax.swing.JLabel();
        txt_codDiario = new javax.swing.JTextField();
        txt_fecha = new javax.swing.JTextField();
        jButton1 = new javax.swing.JButton();
        scrol = new javax.swing.JTabbedPane();
        cb_opcion = new javax.swing.JComboBox();
        jLabel5 = new javax.swing.JLabel();
        jLabel4 = new javax.swing.JLabel();
        jButton3 = new javax.swing.JButton();
        jButton4 = new javax.swing.JButton();
        jButton5 = new javax.swing.JButton();

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(administrador.AdministradorApp.class).getContext().getResourceMap(Vent_Mayorizacion.class);
        setBorder(javax.swing.BorderFactory.createTitledBorder(resourceMap.getString("Form.border.title"))); // NOI18N
        setName("Form"); // NOI18N
        setLayout(null);

        jLabel1.setFont(resourceMap.getFont("jLabel1.font")); // NOI18N
        jLabel1.setForeground(resourceMap.getColor("jLabel1.foreground")); // NOI18N
        jLabel1.setText(resourceMap.getString("jLabel1.text")); // NOI18N
        jLabel1.setName("jLabel1"); // NOI18N
        add(jLabel1);
        jLabel1.setBounds(20, 20, 150, 17);

        jLabel2.setText(resourceMap.getString("jLabel2.text")); // NOI18N
        jLabel2.setName("jLabel2"); // NOI18N
        add(jLabel2);
        jLabel2.setBounds(30, 60, 31, 14);

        jLabel3.setText(resourceMap.getString("jLabel3.text")); // NOI18N
        jLabel3.setName("jLabel3"); // NOI18N
        add(jLabel3);
        jLabel3.setBounds(30, 84, 63, 20);

        txt_codDiario.setText(resourceMap.getString("txt_codDiario.text")); // NOI18N
        txt_codDiario.setName("txt_codDiario"); // NOI18N
        add(txt_codDiario);
        txt_codDiario.setBounds(80, 60, 130, 20);

        txt_fecha.setText(resourceMap.getString("txt_fecha.text")); // NOI18N
        txt_fecha.setName("txt_fecha"); // NOI18N
        add(txt_fecha);
        txt_fecha.setBounds(120, 90, 90, 20);

        jButton1.setText(resourceMap.getString("jButton1.text")); // NOI18N
        jButton1.setName("jButton1"); // NOI18N
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });
        add(jButton1);
        jButton1.setBounds(250, 60, 140, 23);

        scrol.setBorder(javax.swing.BorderFactory.createTitledBorder(""));
        scrol.setTabPlacement(javax.swing.JTabbedPane.LEFT);
        scrol.setName("scrol"); // NOI18N
        add(scrol);
        scrol.setBounds(30, 140, 890, 490);

        cb_opcion.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "mes", "aÃ±o" }));
        cb_opcion.setName("cb_opcion"); // NOI18N
        add(cb_opcion);
        cb_opcion.setBounds(304, 90, 80, 20);

        jLabel5.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
        jLabel5.setText(resourceMap.getString("jLabel5.text")); // NOI18N
        jLabel5.setName("jLabel5"); // NOI18N
        add(jLabel5);
        jLabel5.setBounds(250, 90, 48, 14);

        jLabel4.setText(resourceMap.getString("jLabel4.text")); // NOI18N
        jLabel4.setName("jLabel4"); // NOI18N
        add(jLabel4);
        jLabel4.setBounds(730, 20, 168, 14);

        jButton3.setText(resourceMap.getString("jButton3.text")); // NOI18N
        jButton3.setName("jButton3"); // NOI18N
        jButton3.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton3ActionPerformed(evt);
            }
        });
        add(jButton3);
        jButton3.setBounds(730, 40, 178, 23);

        jButton4.setText(resourceMap.getString("jButton4.text")); // NOI18N
        jButton4.setName("jButton4"); // NOI18N
        jButton4.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton4ActionPerformed(evt);
            }
        });
        add(jButton4);
        jButton4.setBounds(730, 70, 178, 23);

        jButton5.setText(resourceMap.getString("jButton5.text")); // NOI18N
        jButton5.setName("jButton5"); // NOI18N
        jButton5.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton5ActionPerformed(evt);
            }
        });
        add(jButton5);
        jButton5.setBounds(730, 100, 178, 23);
    }// </editor-fold>//GEN-END:initComponents

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed
// TODO add your handling code here:
    refrescar();
    muestraMayor();
//    panelCuenta pc=new panelCuenta();
//    scrol.add("Nombre Cuenta",pc);
    
}//GEN-LAST:event_jButton1ActionPerformed

private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed
// TODO add your handling code here:
    VentBalanceComprobacion vbc=new VentBalanceComprobacion(conexion,user,aview,vectMayor);
    String tabnombre="Contabilidad BalanceComprobacion";
    aview.tp_controles.addTab(tabnombre,vbc);
    aview.ventanas.add(vbc);
    aview.seleccionarTab();  
    
}//GEN-LAST:event_jButton3ActionPerformed

private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed
// TODO add your handling code here:
    EstadoResultados ers=new EstadoResultados(conexion,user,aview,vectMayor);
    
    String tabnombre="Contabilidad Estado de Resultados";
    aview.tp_controles.addTab(tabnombre,ers);
    aview.ventanas.add(ers);
    aview.seleccionarTab();  
    
}//GEN-LAST:event_jButton4ActionPerformed

private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed
// TODO add your handling code here:
    balanceGeneral ef=new balanceGeneral(conexion,vectMayor);
    String tabnombre="Contabilidad Balance General";
    aview.ventanas.add(ef);
    aview.tp_controles.addTab(tabnombre,ef);
    aview.seleccionarTab();
     
    
}//GEN-LAST:event_jButton5ActionPerformed
public void refrescar(){
scrol.removeAll();    
String codigoDiario=diarioEnt.cb_codigo.getItemAt(diarioEnt.cb_codigo.getSelectedIndex()).toString();
txt_codDiario.setText(codigoDiario);
String DATE_FORMAT = "yyyy-MM-dd";//Refer Java DOCS for formats
java.text.SimpleDateFormat sdf =  new java.text.SimpleDateFormat(DATE_FORMAT);
txt_fecha.setText(sdf.format(diarioEnt.txt_fecha.getTime()));


}

//public void crearPaneles(){
////Metodo para Crear los Paneles:
//    
//
//}

public Vector sacoCuentas(){
//Saco las Cuentas de la Empresa y las Guardo en un Vector:
    Vector cuentas=new Vector();
        ResultSet resp = conexion.consultarBase("SELECT * FROM tercernivel;");
        int n1 = 0;
        int n2 = 0;
        int n3 = 0;
        String codigoCuenta = "";
        String nombreCuenta="";
        
        try {
            while (resp.next()) {
                Vector datos=new Vector();
                n1 = resp.getInt(1);
                n2 = resp.getInt(2);
                n3 = resp.getInt(3);
                codigoCuenta = n3 + "," + n2 + "," + n1;
                nombreCuenta=resp.getString(4);
                datos.add(codigoCuenta);
                datos.add(nombreCuenta);
                //System.out.println("Las cuentas son:"+codigoCuenta+" valor:"+nombreCuenta);
                cuentas.add(datos);
            }
        }catch(SQLException e){
        }
return cuentas;
}

public Vector sacoAsientosDetalles(){
Vector detalles=new Vector();
//Valido por periodo o por mes:
String hoyFecha=new java.sql.Date(System.currentTimeMillis()).toString();    
int seleccion=cb_opcion.getSelectedIndex();
String xfecha="";
if(seleccion==0){//Sacar resultados x mes:
   xfecha="and year(fecha_dia)=year('"+hoyFecha+"') and month(fecha_dia)=month('"+hoyFecha+"')";
   }else{}//Sacar resultados x periodo

//Saco Asientos:
String codDiario = txt_codDiario.getText();
    ResultSet resp2 = conexion.consultarBase("SELECT cod_tercernivel,cod_segundonivel,cod_primernivel,debe,haber FROM asiento a,dtl_asiento d where a.cod_diario="+codDiario+" and d.cod_asiento=a.cod_asiento and (parcial+debe+haber)>0 "+xfecha+" ;");
    try {
        resp2.beforeFirst();
        while (resp2.next()) {
            Vector datos=new Vector();
            int n3 = resp2.getInt(1);
            int n2 = resp2.getInt(2);
            int n1 = resp2.getInt(3);
            String codigoCuenta = n1 + "," + n2 + "," + n3;
            double debe=resp2.getDouble(4);
            double haber=resp2.getDouble(5);
            double valor=debe-haber;
            
            valor=Double.parseDouble(nf.format(valor).replaceAll(",","."));
            datos.add(codigoCuenta);
            datos.add(valor);
            //System.out.println("Los detalles son:"+codigoCuenta+" valor:"+valor);
            detalles.add(datos);
        }
    }catch(SQLException e){}

return detalles;
}

public Vector pogoDetalleCuentas(Vector cuentas,Vector detalles){
//System.out.println("El numero de cuentas son:"+cuentas.size());   
//System.out.println("El numero de detalles son:"+detalles.size());
//Recorro Asientos:
    for(int i=0;i<detalles.size();i++){
     String codigo=(((Vector)detalles.elementAt(i)).elementAt(0)).toString();
     double valor=Double.parseDouble(((Vector)detalles.elementAt(i)).elementAt(1).toString());
     ponerCuenta(cuentas,codigo,valor);
    //System.out.println("El detalle es:"+codigo+" valor:"+valor);
    }


return cuentas;
}

public void ponerCuenta(Vector cuentas,String codigo,double valor){
    int tamano=cuentas.size();
    int cont=0;
    while(cont<tamano){
        Vector datos=((Vector)cuentas.elementAt(cont));
        String codCuenta=datos.elementAt(0).toString();
        //Compara:
        if(codCuenta.equals(codigo)){
        //System.out.println("Encontro!!"+codCuenta); 
        ((Vector)cuentas.elementAt(cont)).add(valor);
        break;
        }
    cont++;
    }
}

public void sacoMayor(){
//Creo el Vector donde se guardan los datos Cuentas
Vector cuentas=sacoCuentas();
Vector detalles=sacoAsientosDetalles();
Vector mayor=pogoDetalleCuentas(cuentas,detalles);
//muestroMayor(mayor);
creoMayor(mayor);
}

public void creoMayor(Vector mayor){
    //Limpio el Vector de Saldos:
    vectMayor.removeAllElements();
    
    //Creo Mayor:
    for(int i=0;i<mayor.size();i++){
    //Creo el panel:
    panelCuenta pc=new panelCuenta();
    Vector datos=new Vector();
    //Saco la cuenta:
    Vector cuenta=(Vector) mayor.elementAt(i);
    String codigo=cuenta.elementAt(0).toString();
    String nombre=cuenta.elementAt(1).toString();
    
    pc.ponerNombre(nombre);
    pc.ponerCodigo(codigo);
    //Agrego al vector de saldos:
    datos.add(nombre);
    datos.add(codigo);
    
    for(int j=2;j<cuenta.size();j++){
        //Creo el panel para para Guardar los Datos:
        double detalle=Double.parseDouble(cuenta.elementAt(j).toString());
        if(detalle>0){
        pc.ponerDebe(detalle);
        }else{
        pc.ponerHaber(detalle);
        }
        
    }
    pc.actualizaTotales();
    datos.add(pc.sacaSaldo());
    vectMayor.add(datos);
    scrol.add(nombre,pc);
    
    }
    
    
}

public void muestroMayor(Vector mayor){
int tamano=mayor.size();
    int cont=0;
    while(cont<tamano){
        Vector cuenta=(Vector)mayor.elementAt(cont);
        String codigo=cuenta.elementAt(0).toString();
        String nombre=cuenta.elementAt(1).toString();
       //System.out.println("La cuenta es:"+codigo+" "+nombre);
        
        int t=cuenta.size();
        int c=2;
        while(c<t){
            double valor=Double.parseDouble(cuenta.elementAt(c).toString());
           //System.out.println("\t"+valor);
            c++;
        }
        cont++;
        
    }
   
}



 public void muestraMayor() {
sacoMayor();     
 }   


//public void muestraMayor2() {
//    String hoyFecha=new java.sql.Date(System.currentTimeMillis()).toString();    
//    int seleccion=cb_opcion.getSelectedIndex();
//    String xfecha="";
//    
//    if(seleccion==0){
//        //Sacar resultados x mes:
//        xfecha="and year(fecha_dia)=year('"+hoyFecha+"') and month(fecha_dia)=month('"+hoyFecha+"');";
//    }else{
//        //Sacar resultados x periodo:
//    }
//    
//    
//    //------------------------------------------------------Saco Datos:
//        //Limpio el vector para guardar los paneles:
//        vectMayor.removeAllElements();
//        
//        //Saco todas las cuentas existentes de la  Empresa:
//        String codDiario = txt_codDiario.getText();
//        ResultSet resp = conexion.consultarBase("SELECT * FROM tercernivel;");
//        int n1 = 0;
//        int n2 = 0;
//        int n3 = 0;
//        String codigoCuenta = "";
//        String nombreCuenta="";
//        
//        try {
//            while (resp.next()) {
//                n1 = resp.getInt(1);
//                n2 = resp.getInt(2);
//                n3 = resp.getInt(3);
//                codigoCuenta = n3 + "," + n2 + "," + n1;
//                nombreCuenta=resp.getString(4);
//                //Creo el panel para para Guardar los Datos:
//                panelCuenta pc=new panelCuenta();
//                scrol.add(nombreCuenta,pc);
//                pc.ponerNombre(nombreCuenta);
//                pc.ponerCodigo(codigoCuenta);
//                
//                //Guardo los paneles para usarlos luego:
//                vectMayor.add(pc);
//                
//               //System.out.println("######################################");
//               //System.out.println("La cuenta que tomo es:"+nombreCuenta);
//                //Comienzo a Comparar con la conincidencias:
//                
//                
//                //############################################################################################
//                //Recorro Todos los Asientos y todas sus cuentas de el diario:
//                //Saco los Asientos del diario:
//                ResultSet resp2 = conexion.consultarBase("SELECT * FROM asiento where cod_diario=" + codDiario + " "+xfecha+" ");
//                int cod_asiento = 0;
//                try {
//                    resp2.beforeFirst();
//                    while (resp2.next()) {
//                        cod_asiento = resp2.getInt(1);
//                        
//
//                    System.gc();
//                    
//                        //Saco los Detalles de Asientos:
//                    ResultSet resp3 = conexion.consultarBase("SELECT * FROM dtl_asiento where cod_asiento=" + cod_asiento + " and cod_diario=" + codDiario + " and (parcial+debe+haber)>0 ;");
//                    int cod_detalle = 0;
//                    try {
//                        resp3.beforeFirst();
//                        while (resp3.next()) {
//                            cod_detalle = resp3.getInt(3);
//                            //System.out.println("Los codigos de los detalles son:" + cod_detalle);
//                            
//                            //Saco las cuentas de los detalles:
//                            ResultSet resp4 = conexion.consultarBase("SELECT * FROM dtl_asiento d, tercernivel t where d.cod_asiento=" + cod_asiento + " and d.cod_diario=" + codDiario + " and d.cod_detalle=" + cod_detalle + " and d.cod_tercernivel=t.cod_tercernivel and d.cod_segundonivel=t.cod_segundonivel and d.cod_primernivel=t.cod_primernivel and (parcial+debe+haber)>0 ;");
//                            
//                            int cn1 = 0;
//                            int cn2 = 0;
//                            int cn3 = 0;
//                            String cod_cuenta = "";
//                            String nombre_cuenta = "";
//                            double debe_cuenta = 0;
//                            double haber_cuenta = 0;
//                            try {
//                                resp4.beforeFirst();
//                                resp4.next();
//                                cn1 = resp4.getInt(6);
//                                cn2 = resp4.getInt(5);
//                                cn3 = resp4.getInt(4);
//                                cod_cuenta = String.valueOf(cn1) + "," + String.valueOf(cn2) + "," + String.valueOf(cn3);
//                                nombre_cuenta = resp4.getString(13);
//                                debe_cuenta = resp4.getDouble(8);
//                                haber_cuenta = resp4.getDouble(9);
//                               //System.out.println("Los datos de este asiento son: Cuenta=" + cod_cuenta + " Nombre:" + nombre_cuenta + " Debe:" + debe_cuenta + " Haber:" + haber_cuenta);
//                                
//                                
//                                //System.out.println("COMPARO:"+nombreCuenta+"=="+nombre_cuenta);
//                                //Si el valor es igual al de la cuenta buscada:
//                                if(nombreCuenta.equals(nombre_cuenta))
//                                {//Si es que es igual:
//                                    if(debe_cuenta==0){}else{
//                                    //pc.ponerDebe(String.valueOf(debe_cuenta));
//                                    pc.actualizaTotales();
//                                    }
//                                    if(haber_cuenta==0){}else{
//                                    //pc.ponerHaber(String.valueOf(haber_cuenta));
//                                    pc.actualizaTotales();
//                                    }
//                                    
//                                }
//                                
//                                
//                                
//                            } catch (Exception ex) {
//                                //Logger.getLogger(Vent_Mayorizacion.class.getName()).log(Level.SEVERE, null, ex);
//                            }
//
//                        }
//                    } catch (SQLException ex) {
//                        Logger.getLogger(Vent_Mayorizacion.class.getName()).log(Level.SEVERE, null, ex);
//                    }
//                        
//                        
//                        
//                    }
//
//                } catch (SQLException ex) {
//                    Logger.getLogger(Vent_Mayorizacion.class.getName()).log(Level.SEVERE, null, ex);
//                }
//                //############################################################################################
//
//            }
//        } catch (SQLException ex) {
//            Logger.getLogger(Vent_Mayorizacion.class.getName()).log(Level.SEVERE, null, ex);
//        }
//
//       //System.out.println("El codigo es:" + codigoCuenta);
//
//    }

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JComboBox cb_opcion;
    private javax.swing.JButton jButton1;
    private javax.swing.JButton jButton3;
    private javax.swing.JButton jButton4;
    private javax.swing.JButton jButton5;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JLabel jLabel4;
    private javax.swing.JLabel jLabel5;
    private javax.swing.JTabbedPane scrol;
    private javax.swing.JTextField txt_codDiario;
    private javax.swing.JTextField txt_fecha;
    // End of variables declaration//GEN-END:variables

}
